package lcof;

import pojo.TreeNode;
import java.util.ArrayList;
import java.util.List;


/**
 * @author 江岸
 * @version V1.0
 * @ClassName: PathSum34
 * @description: 输入一棵二叉树和一个整数，打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
 * @date 2021/5/1115:11
 * @since V1.0
 */
public class PathSum34 {
    int target;
    List<List<Integer>> res;


    //dfs
    public List<List<Integer>> pathSum(TreeNode root, int target) {
        this.target = target;
        res = new ArrayList<>();
        if (root==null) return res;
        List<Integer> list = new ArrayList<>();
        dfs(list,root,0);
        return res;
    }

    public void dfs(List<Integer> list,TreeNode node,int count){
        count = count + node.val;
//        if (count>target) return; 测试用例有负数 贼坑
        //加入list
        list.add(node.val);
        if (node.left==null && node.right==null){
            if (count == target){
                res.add(new ArrayList<>(list));
                list.remove(list.size()-1);
                return;
            }
        }
        if(node.left!=null) dfs(list,node.left,count);
        if(node.right!=null) dfs(list,node.right,count);
        list.remove(list.size()-1);
    }
}
